using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GravityControl : MonoBehaviour
{
    public PlayerControl playerControl; // 人物移动组件（原注释），用于控制角色的移动和重力效果

    void Start() {
        // 获取PlayerControl人物移动组件的引用，用于访问角色的移动控制
        playerControl = GetComponent<PlayerControl>();
    }

    void Update() {
        // 每帧调用重力函数，模拟重力效果
        Gravity();
    }

    public float gravity = 9.82f; // 重力加速度，默认值为地球重力
    public Transform checkObj; // 检查碰撞的物体（原注释），用于检测角色是否站在地面上
    public float checkRadius; // 碰撞检测的半径（原注释），影响地面检测的范围
    public LayerMask checkLayer; // 碰撞的层级（原注释），用于指定哪些层的物体参与碰撞检测
    public bool isGround = true; // 是否站在地面（原注释），标记角色是否处于地面状态

    // 重力效果
    private void Gravity() {
        // 使用CheckSphere方法检测角色是否站在地面上，返回值存储在isGround中
        isGround = Physics.CheckSphere(checkObj.position, checkRadius, checkLayer); // 检测碰撞(原注释)
        // 根据地面检测结果设置角色是否可以跳跃
        CharacterParam.param.jumpEnabled = isGround;

        // 如果角色正在向下运动且检测到站在地面上，将Y轴速度重置为-0.5f（轻微下沉效果）
        if (playerControl.moveInY.y < 0 && isGround == true) {  // 在地面时下落距离重置(原注释)
            playerControl.moveInY.y = -0.5f;
        }

        // 根据重力公式，计算每帧下落的位移，并更新角色的Y轴速度
        // 重力公式: 位移 = 重力加速度 * 时间^2，这里用累积的时间来模拟不断加速的下落效果
        playerControl.moveInY.y -= gravity * Time.deltaTime;    // 重力公式 每秒下落位移 dx=g*T^2; 另一个 T 在 playerControl 相乘(原注释)
    }
}
